animation: Add _gtk_style_animation_is_static()
authorBenjamin Otte <otte@redhat.com>
Wed, 12 Sep 2012 13:27:59 +0000 (15:27 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 17 Sep 2012 18:39:12 +0000 (20:39 +0200)
This will be useful to not trigger updates all the time when nothing is
happening (ie due to animations being paused or due to them having
reached their final value).

gtk/gtkcssanimation.c
gtk/gtkcsstransition.c
gtk/gtkstyleanimation.c
gtk/gtkstyleanimationprivate.h

index 765bb4e750a3fc99d2224dc2cc9dfb66fad6669f..c0964de2ba28e7950aebc0902147ba4c50758169 100644 (file)
@@ -143,6 +143,18 @@ gtk_css_animation_is_finished (GtkStyleAnimation *style_animation,
   return FALSE;
 }
 
+static gboolean
+gtk_css_animation_is_static (GtkStyleAnimation *style_animation,
+                             gint64             at_time_us)
+{
+  GtkCssAnimation *animation = GTK_CSS_ANIMATION (style_animation);
+  double iteration;
+
+  iteration = gtk_css_animation_get_iteration (animation, at_time_us);
+
+  return iteration >= animation->iteration_count;
+}
+
 static void
 gtk_css_animation_finalize (GObject *object)
 {
@@ -165,6 +177,7 @@ _gtk_css_animation_class_init (GtkCssAnimationClass *klass)
 
   animation_class->set_values = gtk_css_animation_set_values;
   animation_class->is_finished = gtk_css_animation_is_finished;
+  animation_class->is_static = gtk_css_animation_is_static;
 }
 
 static void
index ede18b32b7ba0fb774c0ddc7cfcd76dce4c42fdf..d1287f2de6857cc993acf7027d7c363e015ed802 100644 (file)
@@ -68,6 +68,15 @@ gtk_css_transition_is_finished (GtkStyleAnimation *animation,
   return at_time_us >= transition->end_time;
 }
 
+static gboolean
+gtk_css_transition_is_static (GtkStyleAnimation *animation,
+                              gint64             at_time_us)
+{
+  GtkCssTransition *transition = GTK_CSS_TRANSITION (animation);
+
+  return at_time_us >= transition->end_time;
+}
+
 static void
 gtk_css_transition_finalize (GObject *object)
 {
@@ -90,6 +99,7 @@ _gtk_css_transition_class_init (GtkCssTransitionClass *klass)
 
   animation_class->set_values = gtk_css_transition_set_values;
   animation_class->is_finished = gtk_css_transition_is_finished;
+  animation_class->is_static = gtk_css_transition_is_static;
 }
 
 static void
index aab78bddd7b25f18c059fb5a8a8e97c7340a6ae4..ac74851c599ceb63c54cb3275c122537436ac47b 100644 (file)
@@ -39,11 +39,19 @@ gtk_style_animation_real_is_finished (GtkStyleAnimation *animation,
   return TRUE;
 }
 
+static gboolean
+gtk_style_animation_real_is_static (GtkStyleAnimation *animation,
+                                    gint64             at_time_us)
+{
+  return FALSE;
+}
+
 static void
 _gtk_style_animation_class_init (GtkStyleAnimationClass *klass)
 {
   klass->set_values = gtk_style_animation_real_set_values;
   klass->is_finished = gtk_style_animation_real_is_finished;
+  klass->is_static = gtk_style_animation_real_is_static;
 }
 
 static void
@@ -80,3 +88,26 @@ _gtk_style_animation_is_finished (GtkStyleAnimation *animation,
   return klass->is_finished (animation, at_time_us);
 }
 
+/**
+ * _gtk_style_animation_is_static:
+ * @animation: The animation to query
+ * @at_time_us: The timestamp to query for
+ *
+ * Checks if @animation will not change its values anymore after
+ * @at_time_us. This happens for example when the animation has reached its
+ * final value or when it has been paused.
+ *
+ * Returns: %TRUE if @animation will not change anymore after @at_time_us
+ **/
+gboolean
+_gtk_style_animation_is_static (GtkStyleAnimation *animation,
+                                gint64             at_time_us)
+{
+  GtkStyleAnimationClass *klass;
+
+  g_return_val_if_fail (GTK_IS_STYLE_ANIMATION (animation), TRUE);
+
+  klass = GTK_STYLE_ANIMATION_GET_CLASS (animation);
+
+  return klass->is_static (animation, at_time_us);
+}
index 5d5d6c602e0b188ec6c57ff4de6cc01f53eb7440..b4f2c69595c484978e540e74c61678e7f996a229 100644 (file)
@@ -46,6 +46,8 @@ struct _GtkStyleAnimationClass
 
   gboolean      (* is_finished)                         (GtkStyleAnimation      *animation,
                                                          gint64                  at_time_us);
+  gboolean      (* is_static)                           (GtkStyleAnimation      *animation,
+                                                         gint64                  at_time_us);
   GtkBitmask *  (* set_values)                          (GtkStyleAnimation      *animation,
                                                          GtkBitmask             *changed,
                                                          gint64                  for_time_us,
@@ -60,6 +62,8 @@ GtkBitmask *    _gtk_style_animation_set_values         (GtkStyleAnimation
                                                          GtkCssComputedValues   *values) G_GNUC_WARN_UNUSED_RESULT;
 gboolean        _gtk_style_animation_is_finished        (GtkStyleAnimation      *animation,
                                                          gint64                  at_time_us);
+gboolean        _gtk_style_animation_is_static          (GtkStyleAnimation      *animation,
+                                                         gint64                  at_time_us);
 
 
 G_END_DECLS